package com.networkmanagerj.model;

import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import br.com.networkmanagerj.persistence.IEntity;

@Entity
@Table(name = "mensagem")
@NamedQueries({ @NamedQuery(name = "Mensagem.searchAtivos", query = "select obj from Mensagem obj where obj.ativo = true") })
public class Mensagem implements IEntity {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "mensagem_id", nullable = false, unique = true)
	private Integer id;

	@Column(name = "nome", nullable = false, unique = true)
	private String nome;

	@Column(name = "descricao")
	private String descricao;

	@OneToMany(mappedBy = "mensagem", targetEntity = AcaoMensagem.class, fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	private List<AcaoMensagem> acoes;

	@OneToMany(mappedBy = "mensagem", targetEntity = ValorParametroAceitavel.class, fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	private List<ValorParametroAceitavel> parametrosAceitaveis;

	@Column(name = "ativo", nullable = true)
	private boolean ativo;

	/**
	 * 
	 */
	public Mensagem() {
	}

	public Mensagem(Integer mensagemId, String nome, String descricao) {
		this.id = mensagemId;
		this.nome = nome;
		this.descricao = descricao;
	}

	/**
	 * @return the mensagemId
	 */
	public Integer getId() {
		return id;
	}

	/**
	 * @param mensagemId the mensagemId to set
	 */
	public void setId(Integer mensagemId) {
		this.id = mensagemId;
	}

	/**
	 * @return the nome
	 */
	public String getNome() {
		return nome;
	}

	/**
	 * @param nome the nome to set
	 */
	public void setNome(String nome) {
		this.nome = nome;
	}

	/**
	 * @return the descricao
	 */
	public String getDescricao() {
		return descricao;
	}

	/**
	 * @param descricao the descricao to set
	 */
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public List<AcaoMensagem> getAcoes() {
		return acoes;
	}

	public void setAcoes(List<AcaoMensagem> acoes) {
		this.acoes = acoes;
	}

	public List<ValorParametroAceitavel> getParametrosAceitaveis() {
		return parametrosAceitaveis;
	}

	public void setParametrosAceitaveis(
			List<ValorParametroAceitavel> parametrosAceitaveis) {
		this.parametrosAceitaveis = parametrosAceitaveis;
	}

	public void add(AcaoMensagem acao) {
		acoes.add(acao);
	}

	public boolean isAtivo() {
		return ativo;
	}

	public void setAtivo(boolean ativo) {
		this.ativo = ativo;
	}

	@Override
	public String toString() {
		return "nome: " + nome;
	}
}
